home *** CD-ROM | disk | FTP | other *** search
- Overlays ab ResourceMaster v3.0
- -------------------------------
-
- Armin Diedering
- letzte Änderung: 21.1.99
- Tabulatorweite: 3
-
-
- 1. Was sind ResourceMaster-Overlays ?
- =====================================
-
- ResourceMaster unterstützt ab Version 3.0 Overlays. Ein Overlay wird beim
- Programmstart aus dem "modules"-Ordner geladen.
-
-
- 2. Wozu ResourceMaster-Overlays ?
- =================================
-
- Overlays können das Zeichnen der Objekte im Dialog- bzw- Menü-Editor
- übernehmen. Dadurch können die Objekte im Editor schon so aussehen, wie
- später im Programm (FlyDials usw.)
-
-
- 3. Wie Programmiere ich ein Overlay ?
- =====================================
-
- 3.1 Was muß das Overlay machen?
- ===============================
-
- Ein Overlay ist ein normales TOS-Programm und wird mit einer Kommandozeile
- gestartet. Diese Kommandozeile hat immer eine Länge von 14 Zeichen. Sie muß
- mit "RSMOVL" beginnen. Das sind schon mal 6 Zeichen. Die restlichen 8
- Zeichen stellen eine 32-bit-HEX-Zahl dar (dabei gilt: 'A'=0, 'B'=1 ...
- 'J'=9, 'K'=a ... 'O'=e und 'P'=f).
-
- Diese HEX-Zahl zeigt auf einen OVL2RSM-Zeiger (OVL2RSM**). Einzige Aufgabe
- des StartUp-Codes ist es, die Adresse der eigenen "OVL2RSM"-Structur dort
- einzutragen. Ist alles glatt gegangen, dann beendet sich das Overlay mit
- Pterm(0). Ist ein Fehler aufgetreten, dann muß es sich mit Pterm(1) beenden.
-
- Man sollte folgenden StartUp-Code verwendet:
-
- ------------Schnipp-----------
- extern OVL2RSM* Overlay;
-
- WORD OverlayStartUp(BASEPAGE* BasePage)
- {
- WORD Ret = 1;
-
- if(BasePage->p_cmdlin[0] == 14) /* immer 14 Byte lang */
- {
- if(!strncmp(&BasePage->p_cmdlin[1], "RSMOVL", 6))
- {
- LONG Adr = 0;
- char* Pos = &BasePage->p_cmdlin[7];
- WORD i;
-
- for(i=0; i<8; i++)
- {
- Adr <<= 4;
- Adr |= *Pos++ - 'A'; /* 'A'=0 usw. */
- }
- *((OVL2RSM**)Adr) = &Overlay; /* Adresse der Struktur eintragen */
- Ret = 0; /* alles OK zurückgeben */
- }
- }
- Pterm(Ret);
- }
- ------------Schnapp-----------
-
- so jetzt kommt noch die Overlay-to-ResourceMaster-Structur:
-
- ------------Schnipp-----------
- typedef struct
- {
- LONG Magic; /* 0x4f424a43 'OBJC' */
- WORD Protokoll; /* zur Zeit NULL */
- LONG ID; /* Anhand der ID werden */
- /* Overlays unterschieden */
- WORD Version; /* vom Overlay abhängig */
- char Name[32]; /* vom Overlay abhängig */
- char Copyright[32]; /* vom Overlay abhängig */
-
- WORD (*Init)(const char* FileName, UWORD* Global, RSM2OVL* RsmOvl);
- void (*Exit)();
-
- WORD (*Draw)(OBJECT* Objc, LONG* Clip);
-
- } OVL2RSM;
- ------------Schnapp-----------
-
- MagiC: muß immer 0x4f424a43 ('OBJC') sein
- ------
-
- Protokoll: Sollte die OVL2RSM-Struktur einmal erweitert werden, dann
- ---------- können diese Erweiterungen anhand der Protokollversion erkannt
- werden.
-
-
- ID: Jedes Overlay muß sich durch seine ID eindeutig identifizieren
- --- lassen. Irgend wann einmal soll RSM auch mehrere Overlays
- gleichzeitig unterstützen. Damit für jede Resource das richtige
- Overlay aktiviert wird, speichert RSM schon heute die ID des
- Overlays in die *.rsm-Datei.
-
- Ich führe eine Liste aller vergebener IDs. Wenn ein Autor ein
- Overlay veröffentlichen möchte, dann sollte er mir die geplante
- ID mitteilen.
-
- Version: Haxadezimal codierte Version des Overlays z.B. 0101 für v1.01.
- --------
-
- Name: Name des Overlays (max 32 Zeichen inkl. 0-Byte)
- -----
-
- Copyright: Copyright des Overlays (max 32 Zeichen inkl. 0-Byte)
- ----------
-
- WORD Init(const char* FileName, UWORD* Global, RSM2OVL* RsmOvl);
- ----------------------------------------------------------------
-
- FileName: Kompletter Name incl. Pfad des Overlays. Kann z.B. dazu benutzt zu
- werden, um eine *.inf oder *.cnf zu finden und zu laden.
- Global: Das Global-Feld von RSM. Das Overlay darf kein appl_init und schon
- gar kein appl_exit machen. Das Global-Feld kann dazu benutzt
- werden um AES-Funktionen (auch ohne appl_init) aufzurufen. Das
- Overlay darf aber das Global-Felds nicht direkt benutzen.
- <<<<<<<<<< Es darf nur eine Kopie verwenden >>>>>>>>>>
- RsmOvl: Über die RSM2OVL-Struktur kann der ResourceMaster dem Overlay
- diverse Funktionen und Informationen zur Verfügung stellen.
-
- Die Init Funktion ist jetzt dazu da, um das Overlay zu
- initialisieren. Es kann Speicher angefordert werden usw.
-
- Ergebnis: 0=>OK , !=0 => Fehler
-
-
-
- void Exit();
- ------------
-
- Dient der De-Initialisation (Speicher freigeben usw.)
-
-
-
- WORD Draw(OBJECT* Objc, LONG* Clip);
- -------------------------------------
-
- Objc: Das Objekt als Baum (ob_head, _tail und _next = -1)
- Clip: Ein Zeiger auf 4 LONG-Werte (x,y,w,h) für das Cliping.
- ====
- Das Overlay muß entscheiden, ob es das Objekt Zeichnen möchte oder nicht.
-
- Ergebnis: 0 => Ich habe das Objekt selber gezeichnet
- 1 => Ich habe das Objekt nicht gezeichnet;
- RSM soll das Objekt zeichnen
-
-
- 3.2 Was macht der ResourceMaster ?
- ==================================
-
- Der ResourceMaster stellt dem Overlay die RSM2OVL-Struktur zur Verfügung.
-
- ------------Schnipp-----------
- typedef struct
- {
- WORD Protokoll; /* zur Zeit NULL */
- } RSM2OVL;
- ------------Schnapp-----------
-
- Protokoll: Gibt Auskunft darüber, welcher Erweiterungen Verfügbar sind.
- ----------
-
- 4. Kontakt
- ==========
-
- Wer ein Overlay programmiert muß dem Overlay eine eindeutige ID geben. Um
- Doppelbelegungen zu vermeiden, führe ich eine Liste der IDs.
- Wer ein Overlay plant sollte mir die geplante ID mitteilen und auf meine
- Rückmeldung warten. Wenn die ID noch frei ist, dann wird sie in der Liste
- aufgenommen.
- Die Mitteilung der geplanten Overlay-ID sollte nur per e-Mail erfolgen.
-
- Armin@Diedering.de
-
- Außerdem wird man die Liste auch auf meiner Homepage finden
-
- http://www.Diedering.de
-
-